/*
 * Parecer.java
 *
 * Created on 24/02/2011, 13:51:03
 */

package pbf.internalframe;

import java.util.ArrayList;
import javax.swing.table.DefaultTableModel;
import org.hibernate.Session;
import pbf.conf.hibernate.HibernateUtil;
import pbf.conf.hibernate.entidades.Agendamento;
import pbf.conf.hibernate.entidades.Atendimento;
import pbf.conf.hibernate.entidades.Familia;
import pbf.conf.hibernate.entidades.StatusAtendimento;
import pbf.dialog.AnexarComentario;
import pbf.dialog.CadastrarStatus;
import pbf.dialog.DetalhesAtendimento;
import pbf.dialog.DetalhesFamilia;
import pbf.principal.SistemaDeAgendamento;
import pbf.tcp.cliente.Cliente;
import pbf.util.DataHora;
import pbf.util.Mensagem;

/**
 *
 * @author Ricardo
 */
public class CadastrarAtendimento extends javax.swing.JInternalFrame
{
    private AnexarComentario anexo = new AnexarComentario(null, true);
    private ArrayList<StatusAtendimento> listaStatus = new ArrayList<StatusAtendimento>();
    private ArrayList<Atendimento> listaAtendimento = new ArrayList<Atendimento>();
    private ArrayList<Agendamento> listaAgendamento = new ArrayList<Agendamento>();
    private static Object[] objetos = new Object[4];
    private Familia familia = null;
    private Agendamento agendamento = null;
    private int indice=0;
    private Session sessao = null;
    private DetalhesAtendimento detalhesAtendimento = new DetalhesAtendimento(null , true);
    private DetalhesFamilia detalhesFamilia = new DetalhesFamilia(null,true);

    public CadastrarAtendimento()
    {
        initComponents();
    }

    public void setVisible()
    {
        if(isAgendamento())
        {
            indice=0;
            anexo.setComentario("");
            sessao = HibernateUtil.openSession();
            sessao.beginTransaction();
            setStatusDoAtendimento();
            setListaAgendamento();
            setFormulario();
            setVisible(true);
        }
        else
        {
            Mensagem.mensageiro("Nenhuma Família Agendada.");
        }
    }

    // Verifica se existi algum agendamento gravado no banco o naquele momento
    private boolean isAgendamento()
    {
        try 
        {
             Session _sessao = HibernateUtil.openSession();
             _sessao.beginTransaction();
                
             listaAgendamento = (ArrayList<Agendamento>) _sessao.createQuery("From pbf.conf.hibernate.entidades.Agendamento WHERE AGENDAMENTO_ATIVO='S' AND (AGENDAMENTO_DT_ATENDIMENTO BETWEEN '"+DataHora.getTimeStampInicioDoDia()+"' AND '"+DataHora.getTimeStampFimDoDia()+"') ORDER BY AGENDAMENTO_AT_PREFERENCIAL ASC").list();
             
            _sessao.getTransaction().commit();
            
             return (listaAgendamento.size()>0)?  true:false;
        } catch (Exception e) {
            return false;
        }
    }

    private void setStatusDoAtendimento() {
        sessao = HibernateUtil.openSession();
        sessao.beginTransaction();
        familiaStatus.removeAllItems();

        listaStatus = (ArrayList<StatusAtendimento>) sessao.createQuery("From pbf.conf.hibernate.entidades.StatusAtendimento order by ST_ID").list();

        for (StatusAtendimento l : listaStatus) {
            familiaStatus.addItem(l.getStStatus());
        }
    }

    private void setListaAgendamento()
    {
        listaAgendamento = (ArrayList<Agendamento>) sessao.createQuery("From pbf.conf.hibernate.entidades.Agendamento WHERE AGENDAMENTO_ATIVO='S' AND (AGENDAMENTO_DT_ATENDIMENTO BETWEEN '"+DataHora.getTimeStampInicioDoDia()+"' AND '"+DataHora.getTimeStampFimDoDia()+"') ORDER BY AGENDAMENTO_AT_PREFERENCIAL ASC").list();
    }

    private void setFormulario()
    {
        try
        {
            // Set objetos
            familia = listaAgendamento.get(indice).getFamilia();
            agendamento = listaAgendamento.get(indice);

            //Preenche informações da Família
            familiaId.setText(""+familia.getFamiliaId());
            familiaNome.setText(""+familia.getFamiliaNome());
            familiaBeneficiario.setText(familia.getFamiliaBeneficiario().equals("S")? "SIM":"NÃO");

            //Preenche informações do Agendamento
            familiaDescricao.setText(agendamento.getDescricaoDoAtendimento().getDtDescricao());
            familiaObsercacao.setText(agendamento.getAgendamentoObservacao());

            //Preenche a tabela
            setTable();
        }catch(Exception e)
        {
            Mensagem.mensageiro("internalframe.CadastrarAtendimento.setFormulario: "+e);
        }
    }
    
     private void setTable()
    {
        DefaultTableModel model = (DefaultTableModel) tabela.getModel();
        model.setNumRows(0);

        try
        {
            listaAtendimento = (ArrayList<Atendimento>) sessao.createSQLQuery("SELECT ATENDIMENTO.* FROM Atendimento, Agendamento, Familia, Descricao_do_atendimento, status_atendimento WHERE AGENDAMENTO_FK_DESCRICAO_ATENDIMENTO=DT_ID AND ATENDIMENTO_FK_STATUS=ST_ID AND ATENDIMENTO_FK_AGENDAMENTO=AGENDAMENTO_ID AND AGENDAMENTO_FK_FAMILIA=FAMILIA_ID AND FAMILIA_ID="+familia.getFamiliaId()+" ORDER BY ATENDIMENTO_DT_ATENDIMENTO").addEntity(Atendimento.class).list();

            for(Atendimento a : listaAtendimento)
            {
                objetos[0] = a.getAtendimentoId();
                objetos[1] = DataHora.getData(a.getAtendimentoDtAtendimento());
                objetos[2] = a.getAgendamento().getDescricaoDoAtendimento().getDtDescricao();
                objetos[3] = a.getStatusAtendimento().getStStatus();
                model.addRow(objetos);
            }
            }catch(Exception e)
            {
                Mensagem.mensageiro(""+e);
            }
    }

     private void proximo()
    {
         indice = ((indice+1)>=listaAgendamento.size())? 0:++indice;
         setFormulario();
    }

     private void voltar()
    {
         indice = ((indice-1)<0)? (listaAgendamento.size() - 1):--indice;
         setFormulario();
    }

    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        familiaStatus = new javax.swing.JComboBox();
        jButton1 = new javax.swing.JButton();
        jSeparator9 = new javax.swing.JSeparator();
        jButton2 = new javax.swing.JButton();
        jLabel2 = new javax.swing.JLabel();
        familiaBeneficiario = new javax.swing.JTextField();
        jLabel3 = new javax.swing.JLabel();
        jLabel4 = new javax.swing.JLabel();
        familiaNome = new javax.swing.JTextField();
        jLabel6 = new javax.swing.JLabel();
        familiaDescricao = new javax.swing.JTextField();
        jLabel7 = new javax.swing.JLabel();
        jSeparator10 = new javax.swing.JSeparator();
        jLabel1 = new javax.swing.JLabel();
        jLabel8 = new javax.swing.JLabel();
        jSeparator11 = new javax.swing.JSeparator();
        familiaId = new javax.swing.JTextField();
        jLabel15 = new javax.swing.JLabel();
        jLabel16 = new javax.swing.JLabel();
        jScrollPane1 = new javax.swing.JScrollPane();
        familiaObsercacao = new javax.swing.JTextArea();
        jLabel17 = new javax.swing.JLabel();
        jSeparator15 = new javax.swing.JSeparator();
        jLabel18 = new javax.swing.JLabel();
        jButton5 = new javax.swing.JButton();
        jButton6 = new javax.swing.JButton();
        jButton7 = new javax.swing.JButton();
        jButton8 = new javax.swing.JButton();
        jScrollPane2 = new javax.swing.JScrollPane();
        tabela = new javax.swing.JTable();
        jButton3 = new javax.swing.JButton();

        setClosable(true);
        getContentPane().setLayout(null);

        getContentPane().add(familiaStatus);
        familiaStatus.setBounds(110, 470, 300, 24);

        jButton1.setIcon(new javax.swing.ImageIcon(getClass().getResource("/pbf/imagens/disk.png"))); // NOI18N
        jButton1.setText("Salvar");
        jButton1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton1ActionPerformed(evt);
            }
        });
        getContentPane().add(jButton1);
        jButton1.setBounds(400, 550, 110, 25);
        getContentPane().add(jSeparator9);
        jSeparator9.setBounds(20, 40, 490, 10);

        jButton2.setIcon(new javax.swing.ImageIcon(getClass().getResource("/pbf/imagens/magnifier-zoom.png"))); // NOI18N
        jButton2.setText("Detalhes da Família");
        jButton2.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton2ActionPerformed(evt);
            }
        });
        getContentPane().add(jButton2);
        jButton2.setBounds(330, 110, 180, 25);

        jLabel2.setFont(new java.awt.Font("Tahoma", 0, 16));
        jLabel2.setText("Observações:");
        getContentPane().add(jLabel2);
        jLabel2.setBounds(20, 370, 180, 20);

        familiaBeneficiario.setEditable(false);
        familiaBeneficiario.setFont(new java.awt.Font("Tahoma", 0, 14));
        getContentPane().add(familiaBeneficiario);
        familiaBeneficiario.setBounds(200, 110, 120, 23);

        jLabel3.setFont(new java.awt.Font("Tahoma", 0, 16));
        jLabel3.setText("Família Beneficiária:");
        getContentPane().add(jLabel3);
        jLabel3.setBounds(20, 110, 170, 20);

        jLabel4.setFont(new java.awt.Font("Tahoma", 1, 16));
        jLabel4.setText("Dados da Família");
        getContentPane().add(jLabel4);
        jLabel4.setBounds(20, 20, 170, 20);

        familiaNome.setEditable(false);
        familiaNome.setFont(new java.awt.Font("Tahoma", 0, 14));
        getContentPane().add(familiaNome);
        familiaNome.setBounds(200, 80, 310, 23);

        jLabel6.setFont(new java.awt.Font("Tahoma", 0, 16));
        jLabel6.setText("Responsável Família:");
        getContentPane().add(jLabel6);
        jLabel6.setBounds(20, 80, 170, 20);

        familiaDescricao.setEditable(false);
        familiaDescricao.setFont(new java.awt.Font("Tahoma", 0, 14));
        getContentPane().add(familiaDescricao);
        familiaDescricao.setBounds(200, 337, 310, 23);

        jLabel7.setFont(new java.awt.Font("Tahoma", 1, 16));
        jLabel7.setText("Lista de Atendimentos da Família");
        getContentPane().add(jLabel7);
        jLabel7.setBounds(20, 150, 470, 20);
        getContentPane().add(jSeparator10);
        jSeparator10.setBounds(20, 170, 490, 10);

        jLabel1.setText("Clique duas vezes na linha para vê os detalhes do Atendimento da Família.");
        getContentPane().add(jLabel1);
        jLabel1.setBounds(20, 280, 490, 14);

        jLabel8.setFont(new java.awt.Font("Tahoma", 1, 16));
        jLabel8.setText("Atendimento da Família");
        getContentPane().add(jLabel8);
        jLabel8.setBounds(20, 310, 380, 20);
        getContentPane().add(jSeparator11);
        jSeparator11.setBounds(-10, 540, 550, 10);

        familiaId.setEditable(false);
        familiaId.setFont(new java.awt.Font("Tahoma", 0, 14));
        getContentPane().add(familiaId);
        familiaId.setBounds(200, 50, 310, 23);

        jLabel15.setFont(new java.awt.Font("Tahoma", 0, 16));
        jLabel15.setText("Código da Família:");
        getContentPane().add(jLabel15);
        jLabel15.setBounds(20, 50, 180, 20);

        jLabel16.setFont(new java.awt.Font("Tahoma", 0, 16));
        jLabel16.setText("Status:");
        getContentPane().add(jLabel16);
        jLabel16.setBounds(20, 470, 90, 20);

        familiaObsercacao.setColumns(20);
        familiaObsercacao.setEditable(false);
        familiaObsercacao.setFont(new java.awt.Font("Arial", 0, 16));
        familiaObsercacao.setRows(5);
        jScrollPane1.setViewportView(familiaObsercacao);

        getContentPane().add(jScrollPane1);
        jScrollPane1.setBounds(20, 390, 490, 70);

        jLabel17.setFont(new java.awt.Font("Tahoma", 0, 16));
        jLabel17.setText("Comentário do atendimento:");
        getContentPane().add(jLabel17);
        jLabel17.setBounds(20, 500, 220, 20);
        getContentPane().add(jSeparator15);
        jSeparator15.setBounds(20, 330, 490, 10);

        jLabel18.setFont(new java.awt.Font("Tahoma", 0, 16));
        jLabel18.setText("Descrição:");
        getContentPane().add(jLabel18);
        jLabel18.setBounds(20, 340, 180, 20);

        jButton5.setIcon(new javax.swing.ImageIcon(getClass().getResource("/pbf/imagens/paper-clip.png"))); // NOI18N
        jButton5.setText("Anexar Comentário");
        jButton5.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton5ActionPerformed(evt);
            }
        });
        getContentPane().add(jButton5);
        jButton5.setBounds(340, 500, 173, 25);

        jButton6.setIcon(new javax.swing.ImageIcon(getClass().getResource("/pbf/imagens/sound.png"))); // NOI18N
        jButton6.setText("Som");
        jButton6.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton6ActionPerformed(evt);
            }
        });
        getContentPane().add(jButton6);
        jButton6.setBounds(40, 550, 110, 25);

        jButton7.setIcon(new javax.swing.ImageIcon(getClass().getResource("/pbf/imagens/navigation-180.png"))); // NOI18N
        jButton7.setText("Anterior");
        jButton7.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton7ActionPerformed(evt);
            }
        });
        getContentPane().add(jButton7);
        jButton7.setBounds(160, 550, 110, 25);

        jButton8.setIcon(new javax.swing.ImageIcon(getClass().getResource("/pbf/imagens/navigation.png"))); // NOI18N
        jButton8.setText("Próximo");
        jButton8.setHorizontalTextPosition(javax.swing.SwingConstants.LEFT);
        jButton8.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton8ActionPerformed(evt);
            }
        });
        getContentPane().add(jButton8);
        jButton8.setBounds(280, 550, 110, 25);

        tabela.setModel(new javax.swing.table.DefaultTableModel(
            new Object [][] {
                {"3225", "02/03/2011", "DESBLOQUEIO", "CC"},
                {null, null, null, null},
                {null, null, null, null},
                {null, null, null, null}
            },
            new String [] {
                "ID", "Dt Atendimento", "Descrição", "Status"
            }
        ) {
            boolean[] canEdit = new boolean [] {
                false, false, false, false
            };

            public boolean isCellEditable(int rowIndex, int columnIndex) {
                return canEdit [columnIndex];
            }
        });
        tabela.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                tabelaMouseClicked(evt);
            }
        });
        jScrollPane2.setViewportView(tabela);
        tabela.getColumnModel().getColumn(0).setPreferredWidth(50);
        tabela.getColumnModel().getColumn(0).setMaxWidth(50);
        tabela.getColumnModel().getColumn(1).setPreferredWidth(80);
        tabela.getColumnModel().getColumn(1).setMaxWidth(80);
        tabela.getColumnModel().getColumn(2).setPreferredWidth(120);
        tabela.getColumnModel().getColumn(3).setPreferredWidth(100);
        tabela.getColumnModel().getColumn(3).setMaxWidth(100);

        getContentPane().add(jScrollPane2);
        jScrollPane2.setBounds(20, 180, 490, 100);

        jButton3.setIcon(new javax.swing.ImageIcon(getClass().getResource("/pbf/imagens/toggle-expand.png"))); // NOI18N
        jButton3.setText("Outros");
        jButton3.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton3ActionPerformed(evt);
            }
        });
        getContentPane().add(jButton3);
        jButton3.setBounds(413, 470, 100, 25);

        java.awt.Dimension screenSize = java.awt.Toolkit.getDefaultToolkit().getScreenSize();
        setBounds((screenSize.width-549)/2, (screenSize.height-624)/2, 549, 624);
    }// </editor-fold>//GEN-END:initComponents

    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton1ActionPerformed

        Atendimento atendimento = new Atendimento();
        atendimento.setAgendamento(agendamento);
        atendimento.setAtendimentoComentario(AnexarComentario.getComentario());
        atendimento.setAtendimentoDtAtendimento(DataHora.getCalendar().getTime());
        atendimento.setStatusAtendimento(listaStatus.get(familiaStatus.getSelectedIndex()));
        atendimento.setUsuario(SistemaDeAgendamento.getUsuario());
        sessao.save(atendimento);
        sessao.getTransaction().commit();
        Mensagem.mensageiro("Atendimento concluído com sucesso!");
        setVisible(false);
    }//GEN-LAST:event_jButton1ActionPerformed

    private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton2ActionPerformed
    detalhesFamilia.setFormulario(familia,familia.getLocalidade());
    detalhesFamilia.setVisible(true);
    }//GEN-LAST:event_jButton2ActionPerformed

    private void jButton5ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton5ActionPerformed
    anexo.setVisible(true);
    }//GEN-LAST:event_jButton5ActionPerformed

    private void jButton8ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton8ActionPerformed
        proximo();
    }//GEN-LAST:event_jButton8ActionPerformed

    private void jButton7ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton7ActionPerformed
        voltar();
    }//GEN-LAST:event_jButton7ActionPerformed

    private void tabelaMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_tabelaMouseClicked
        if (evt.getClickCount() == 2) 
        {
                int linha = tabela.getSelectedRow();
                detalhesAtendimento.setFormulario(listaAtendimento.get(linha), listaAtendimento.get(linha).getAgendamento().getDescricaoDoAtendimento(), listaAtendimento.get(linha).getStatusAtendimento());
        }
    }//GEN-LAST:event_tabelaMouseClicked

    private void jButton3ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton3ActionPerformed
        CadastrarStatus cadastrarStatus = new CadastrarStatus(null, true);
        cadastrarStatus.setVisible(true);
        setStatusDoAtendimento();
    }//GEN-LAST:event_jButton3ActionPerformed

    private void jButton6ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton6ActionPerformed
    new Cliente();
    }//GEN-LAST:event_jButton6ActionPerformed


    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JTextField familiaBeneficiario;
    private javax.swing.JTextField familiaDescricao;
    private javax.swing.JTextField familiaId;
    private javax.swing.JTextField familiaNome;
    private javax.swing.JTextArea familiaObsercacao;
    private javax.swing.JComboBox familiaStatus;
    private javax.swing.JButton jButton1;
    private javax.swing.JButton jButton2;
    private javax.swing.JButton jButton3;
    private javax.swing.JButton jButton5;
    private javax.swing.JButton jButton6;
    private javax.swing.JButton jButton7;
    private javax.swing.JButton jButton8;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel jLabel15;
    private javax.swing.JLabel jLabel16;
    private javax.swing.JLabel jLabel17;
    private javax.swing.JLabel jLabel18;
    private javax.swing.JLabel jLabel2;
    private javax.swing.JLabel jLabel3;
    private javax.swing.JLabel jLabel4;
    private javax.swing.JLabel jLabel6;
    private javax.swing.JLabel jLabel7;
    private javax.swing.JLabel jLabel8;
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JScrollPane jScrollPane2;
    private javax.swing.JSeparator jSeparator10;
    private javax.swing.JSeparator jSeparator11;
    private javax.swing.JSeparator jSeparator15;
    private javax.swing.JSeparator jSeparator9;
    private javax.swing.JTable tabela;
    // End of variables declaration//GEN-END:variables

}
